package com.sys.midware.MQ.rocketMQ;

import java.util.List;
import java.util.Set;

import com.alibaba.rocketmq.client.consumer.listener.MessageListener;
import com.sys.midware.MQ.rocketMQ.factory.ProducerFactory;
import com.sys.midware.MQ.rocketMQ.factory.PullConsumerFactory;
import com.sys.midware.MQ.rocketMQ.factory.PushConsumerFactory;
import com.sys.midware.MQ.rocketMQ.logic.IPullConsumer;
import com.sys.midware.MQ.rocketMQ.logic.IPushConsumer;
import com.sys.midware.MQ.rocketMQ.model.MsgSendResult;

/**
 * rocketmq消息相关
 * 
 * @author jerome
 * 
 */
public class RocketMqUtil {

	/**
	 * 发送消息公共方法
	 * 
	 * @param topic
	 *            消息主题
	 * @param msg
	 *            消息
	 * @param tags
	 *            消息标签（scd消息时为网站域名，图片失败反馈消息时为ip地址），如 taobao.com
	 * @return true 成功
	 */
	public static MsgSendResult send(String topic, String tags, String msg) {
		return ProducerFactory.getProducerInstace()
				.sendMsg(topic, tags, msg);
	}

	   /**
     * 发送消息公共方法
     * 
     * @param topic
     *            消息主题
     * @param msg
     *            消息
     * @param tags
     *            消息标签（scd消息时为网站域名，图片失败反馈消息时为ip地址），如 taobao.com
     * @return true 成功
     */
    public static MsgSendResult send(String topic, String tags, String key,String msg) {
        return ProducerFactory.getProducerInstace()
                .sendMsg(topic, tags,key, msg);
    }
	/**
	 * 接收消息的公共方法
	 * 
	 * @param topics
	 *            消息主题列表
	 */
	public static void receive(String topic,String tag,MessageListener messageListener) {
	   IPushConsumer consumer= PushConsumerFactory.getConsumerInstace();
	   consumer.subscribe(topic, tag);
	   consumer.register(messageListener);
	   consumer.start();
	}
	
	/**
     * 接收消息的公共方法
     * 
     * @param topics
     *            消息主题列表
     */
    public static void receive(List<String> topics,MessageListener messageListener) {
        IPushConsumer consumer= PushConsumerFactory.getConsumerInstace();
        consumer.register(messageListener, topics);
        consumer.start();
    }
    
    /**
     * 
     * viewMessageByMsgId 
     * 根据消息Id获取消息 
     * @param  
     * @return  void
     */
    public static void viewMessageByMsgId(String msgId) {
        IPullConsumer consumer= PullConsumerFactory.getConsumerInstace();
        consumer.viewMessage(msgId);
    }
    
    /**
     * 
     * getRegisterTopics 
     * 获取所有注册的topics
     * @param  
     * @return  void
     */
    public static Set<String> getRegisterTopics(String msgId) {
        IPullConsumer consumer= PullConsumerFactory.getConsumerInstace();
        return consumer.getRegisterTopics();
    }


}
